<?php
namespace Ararat\ProductoBundle\Entity;
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;

/**
 * Description of Producto
 *
 * @author daniel
 * @ORM\Entity
 * @Gedmo\SoftDeleteable(fieldName="borradoEl")
 */
class Producto implements ProductoInterface{
    
    /**
     *
     * @var integer
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;
    /**
     *
     * @var string
     * @ORM\Column(type="string")
     */
    protected $nombre;
    /**
     *
     * @var string
     * @ORM\Column(type="string", unique=true, nullable=false)
     * @Gedmo\Slug(fields={"name"}, unique=true)
     */
    protected $slug;
    /**
     *
     * @var string
     * @ORM\Column(type="string")
     */
    protected $descripcion;
    /**
     *
     * @var \DateTime
     * @ORM\Column(type="datetime")
     */
    protected $disponibleDesde;
    /**
     *
     * @var Collection
     * @ORM\OneToMany(targetEntity="Ararat\ProductoBundle\Entity\ProductoPropiedadInterface", mappedBy="producto", cascade={"persist","remove"}) 
     */
    protected $propiedades;
    /**
     *
     * @var \DateTime
     * @ORM\Column(type="datetime")
     * @Gedmo\Timestampable(on="create")
     */
    protected $creadoEl;
    /**
     *
     * @var \DateTime
     * @ORM\Column(type="datetime", nullable=true)
     * @Gedmo\Timestampable(on="update")
     */
    protected $actualizadoEl;
    /**
     *
     * @var \DateTime
     * @ORM\Column(name="borradoEl", type="datetime", nullable=true)
     */
    protected $borradoEl;
    
    public function __construct() {
        $this->disponibleDesde = new \DateTime();
        $this->propiedades = new ArrayCollection();
        $this->creadoEl = new \DateTime();
    }

    public function getId(){
        return $this->id;
    }

    public function getNombre() {
        return $this->nombre;
    }

    public function setNombre($nombre) {
        $this->nombre = $nombre;
        return $this;
    }

    public function getSlug() {
        return $this->slug;
    }

    public function setSlug($slug) {
        $this->slug = $slug;
        return $this;
    }

    public function getDescripcion() {
        return $this->descripcion;
    }

    public function setDescripcion($descripcion) {
        $this->descripcion = $descripcion;
        return $this;
    }

    public function getDisponibleDesde() {
        return $this->disponibleDesde;
    }

    public function setDisponibleDesde(\DateTime $disponibleDesde) {
        $this->disponibleDesde = $disponibleDesde;
        return $this;
    }

    public function getPropiedades() {
        return $this->propiedades;
    }

    public function setPropiedades(Collection $propiedades) {
        foreach ($propiedades as $propiedad){
            $this->addPropiedad($propiedad);
        }
        return $this;
    }

    public function getCreadoEl() {
        return $this->creadoEl;
    }

    public function setCreadoEl(\DateTime $creadoEl) {
        $this->creadoEl = $creadoEl;
        return $this;
    }

    public function getActualizadoEl() {
        return $this->actualizadoEl;
    }

    public function setActualizadoEl(\DateTime $actualizadoEl) {
        $this->actualizadoEl = $actualizadoEl;
        return $this;
    }

    public function getBorradoEl() {
        return $this->borradoEl;
    }

    public function setBorradoEl(\DateTime $borradoEl) {
        $this->borradoEl = $borradoEl;
        return $this;
    }

    public function addPropiedad(ProductoPropiedadInterface $propiedad) {
        if(!$this->hasPropiedad($propiedad)){
            $propiedad->setProducto($this);
            $this->propiedades->add($propiedad);
        }
        return $this;
    }

    public function getPropiedadPorNombre($nombrePropiedad) {
        foreach($this->propiedades as $propiedad){
            if($propiedad->getNombre() === $nombrePropiedad){
                return $propiedad;
            }
        }
        return null;
    }

    public function hasPropiedad(ProductoPropiedadInterface $propiedad) {
        return $this->propiedades->contains($propiedad);
    }

    public function hasPropiedadPorNombre($nombrePropiedad) {
        foreach ($this->propiedades as $propiedad) {
            if ($propiedad->getNombre() === $nombrePropiedad) {
                return true;
            }
        }
        return false;
    }

    public function isBorrado() {
        return null !== $this->borradoEl && new \DateTime() >= $this->borradoEl;
    }

    public function isDisponible() {
        return new \DateTime() >= $this->disponibleDesde;
    }

    public function removePropiedad(ProductoPropiedadInterface $propiedad) {
        if($this->hasPropiedad($propiedad)){
            $propiedad->setProducto(null);
            $this->propiedades->removeElement($propiedad);
        }
        return $this;
    }

}

?>
